class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        n=len(nums)
        dp=[1]*n
        dp[0]=nums[0]
        negs=[]
        ret=-1000000000000000
        if nums[0]<0:
            negs.append(0)
        for i in range(1,n):
            dp[i]=nums[i]*dp[i-1] if dp[i-1]!=0 else nums[i]
            if nums[i]<0:
                if dp[i]>0:
                    ret=max(ret,dp[i])
                else:
                    if len(negs)==0:
                        ret=max(ret,dp[i-1])
                    else:
                        ret=max(ret,dp[i-1],dp[i]//dp[negs[0]])
                negs.append(i)
            elif nums[i]==0:
                if dp[i-1]<0 and nums[i-1]>0:
                    ret=max(ret,dp[i-1]//dp[negs[0]])
                else:
                    ret=max(ret,dp[i-1])
                dp[i]=0
                negs=[]
        if dp[-1]<0 and nums[-1]>0:
            ret=max(ret,dp[-1]//dp[negs[0]])
        ret=max(ret,dp[-1])
        return ret

# 执行用时：
# 40 ms
# , 在所有 Python3 提交中击败了
# 95.96%
# 的用户
# 内存消耗：
# 15.8 MB
# , 在所有 Python3 提交中击败了
# 36.37%
# 的用户